package cn.leaf.calculator.bean;

import cn.leaf.calculator.resolver.FormulaBeanDefinitionResolver;

import java.io.Serializable;
import java.util.Map;

/**
 * 公式bean定义
 *
 * @author 李克国
 * @version 1.0.0
 */
public interface FormulaBeanDefinition<T> extends ParameterBeanDefinition<T> {

    /**
     * 设置公式字符串
     *
     * @param formulaString 公式字符串
     */
    void setFormulaString(String formulaString);

    /**
     * 设置公式名称
     *
     * @param formulaName 公式名称
     */
    void setFormulaName(String formulaName);


    /**
     * 获取公式字符串
     *
     * @return body
     */
    String getFormulaString();

    /**
     * 获取公式名称
     *
     * @return 例如：A+B
     */
    String getFormulaName();

    /**
     * 获取参数列表
     *
     * @return map
     */
    Map<Serializable, ParameterBeanDefinition<T>> getParameters();

    /**
     * 参数参数是否存在
     *
     * @param id id
     * @return boolean
     */
    boolean parameterContains(Serializable id);

    /**
     * 设置参数
     *
     * @param parameter 参数
     */
    void setParameter(ParameterBeanDefinition<T> parameter);

    /**
     * 将公式根据公式名称解析出公式参数
     */
    void resolve();

    /**
     * 设置公式 解析器
     */
    void setResolver(FormulaBeanDefinitionResolver<T> resolver);

}
